/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rpt.lib.relatorio;

import java.awt.Color;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.design.JRDesignParameter;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.type.HorizontalAlignEnum;
import net.sf.jasperreports.engine.type.PrintOrderEnum;
import net.sf.jasperreports.engine.type.VerticalAlignEnum;

/**
 *
 * @author Roberto
 */
public class CRelatorioBasico extends CRelatorioJasperDesign {
    
    protected String fNomeFonte = "Arial";
    protected JRDesignParameter fTituloRelatorio = null;
    protected JRDesignParameter fDataHoje = null;
    protected CBandaRelatorio fBandaTitulo = null;
    protected CBandaRelatorio fBandaCabecalhoPagina = null;
    protected CBandaRelatorio fBandaCabecalhoColuna = null;
    protected CBandaRelatorio fBandaDetalhe = null;
    protected CBandaRelatorio fBandaRodapeColuna = null;
    protected CBandaRelatorio fBandaRodapePagina = null;
    protected CBandaRelatorio fBandaSumario = null;
    protected CEstiloRelatorio fEstiloTitulo = null;
    protected CEstiloRelatorio fEstiloCabecalhoPagina = null;
    protected CEstiloRelatorio fEstiloCabecalhoColuna = null;
    protected CEstiloRelatorio fEstiloDetalhe = null;
    protected CEstiloRelatorio fEstiloRodapeColuna = null;
    protected CEstiloRelatorio fEstiloRodapePagina = null;
    protected CEstiloRelatorio fEstiloSumario = null;
    protected CEstiloRelatorio fEstiloArial18 = null;
    protected CEstiloRelatorio fEstiloArial12 = null;
    protected CEstiloRelatorio fEstiloArial11 = null;
    protected CEstiloRelatorio fEstiloArial10 = null;
    protected CEstiloRelatorio fEstiloArial9 = null;
    protected CEstiloRelatorio fEstiloArial8 = null;
    protected CEstiloRelatorio fEstiloArial7 = null;
    protected CEstiloRelatorio fEstiloArial6 = null;
    protected CEstiloRelatorio fEstiloArial5 = null;
    protected CEstiloRelatorio fEstiloArial18Bold = null;
    protected CEstiloRelatorio fEstiloArial12Bold = null;
    protected CEstiloRelatorio fEstiloArial11Bold = null;
    protected CEstiloRelatorio fEstiloArial9Bold = null;
    protected CEstiloRelatorio fEstiloArial8Bold = null;
    protected CEstiloRelatorio fEstiloArial7Bold = null;
    protected CEstiloRelatorio fEstiloArial9CentroMeio = null;
    protected CEstiloRelatorio fEstiloArial8CentroMeio = null;
    protected CEstiloRelatorio fEstiloArial7CentroMeio = null;
    protected CEstiloRelatorio fEstiloArial10BoldCentroMeio = null;
    protected CEstiloRelatorio fEstiloArial6DirMeio = null;
    protected int fBandaTituloH = 0;
    protected int fComponenteBandaTituloY = 0;
    protected int fComponenteBandaTituloH = 0;
    protected int fBandaCabecalhoPaginaH = 0;
    protected int fComponenteBandaCabecalhoPaginaY = 0;
    protected int fComponenteBandaCabecalhoPaginaH = 0;
    protected int fBandaCabecalhoColunaH = 0;
    protected int fComponenteBandaCabecalhoColunaY = 0;
    protected int fComponenteBandaCabecalhoColunaH = 0;
    protected int fBandaDetalheH = 0;
    protected int fComponenteBandaDetalheY = 0;
    protected int fComponenteBandaDetalheH = 0;
    protected int fBandaRodapeColunaH = 0;
    protected int fComponenteBandaRodapeColunaY = 0;
    protected int fComponenteBandaRodapeColunaH = 0;
    protected int fBandaRodapePaginaH = 0;
    protected int fComponenteBandaRodapePaginaY = 0;
    protected int fComponenteBandaRodapePaginaH = 0;
    protected int fBandaSumarioH = 0;
    protected int fComponenteBandaSumarioY = 0;
    protected int fComponenteBandaSumarioH = 0;
    protected int fBandaCabecalhoGrupoH = 0;
    protected int fBandaRodapeGrupoH = 0;
    public int fEstilo = 0;

    protected CGrupoRelatorio fGrupoRelatorio = null;

    public CRelatorioBasico(boolean aLiberarPreparacao) {
        super();
        this.setPrintOrder(PrintOrderEnum.VERTICAL);
        prepararEstilos(fNomeFonte, "Verdana", "Cp1252");
        preparar(aLiberarPreparacao);
    }

    public CRelatorioBasico(boolean aLiberarPreparacao, int aEstilo) {
        super();
        this.setPrintOrder(PrintOrderEnum.VERTICAL);
        fEstilo = aEstilo;
        prepararEstilos(fNomeFonte, "Verdana", "Cp1252");
        preparar(aLiberarPreparacao);
    }

    /*
    public CRelatorioBasicoCenario(
    int aComponenteBandaTituloY,
    int aComponenteBandaTituloH,
    int aComponenteBandaCabecalhoPaginaY,
    int aComponenteBandaCabecalhoPaginaH,
    int aComponenteBandaCabecalhoColunaY,
    int aComponenteBandaCabecalhoColunaH,
    int aComponenteBandaDetalheY,
    int aComponenteBandaDetalheH,
    int aComponenteBandaRodapeColunaY,
    int aComponenteBandaRodapeColunaH,
    int aComponenteBandaRodapePaginaY,
    int aComponenteBandaRodapePaginaH,
    int aComponenteBandaSumarioY,
    int aComponenteBandaSumarioH) {
    //
    super();
    //
    fComponenteBandaTituloY = aComponenteBandaTituloY;
    fComponenteBandaTituloH = aComponenteBandaTituloH;
    fComponenteBandaCabecalhoPaginaY = aComponenteBandaCabecalhoPaginaY;
    fComponenteBandaCabecalhoPaginaH = aComponenteBandaCabecalhoPaginaH;
    fComponenteBandaCabecalhoColunaY = aComponenteBandaCabecalhoColunaY;
    fComponenteBandaCabecalhoColunaH = aComponenteBandaCabecalhoColunaH;
    fComponenteBandaDetalheY = aComponenteBandaDetalheY;
    fComponenteBandaDetalheH = aComponenteBandaDetalheH;
    fComponenteBandaRodapeColunaY = aComponenteBandaRodapeColunaY;
    fComponenteBandaRodapeColunaH = aComponenteBandaRodapeColunaH;
    fComponenteBandaRodapePaginaY = aComponenteBandaRodapePaginaY;
    fComponenteBandaRodapePaginaH = aComponenteBandaRodapePaginaH;
    fComponenteBandaSumarioY = aComponenteBandaSumarioY;
    fComponenteBandaSumarioH = aComponenteBandaSumarioH;
    //
    preparar();
    //
    } 
     */
    //   

    public CEstiloRelatorio getEstiloDetalhe() {
        return fEstiloDetalhe;
    }

    public void setEstiloDetalhe(CEstiloRelatorio fEstiloDetalhe) {
        this.fEstiloDetalhe = fEstiloDetalhe;
    }

    public CEstiloRelatorio getEstiloArial7() {
        return fEstiloArial7;
    }

    public void setEstiloArial7(CEstiloRelatorio fEstiloArial7) {
        this.fEstiloArial7 = fEstiloArial7;
    }
    
    public CEstiloRelatorio getEstiloArial6() {
        return fEstiloArial6;
    }

    public void setEstiloArial6(CEstiloRelatorio fEstiloArial6) {
        this.fEstiloArial6 = fEstiloArial6;
    }

    public CEstiloRelatorio getEstiloArial5() {
        return fEstiloArial5;
    }

    public void setEstiloArial5(CEstiloRelatorio fEstiloArial5) {
        this.fEstiloArial5 = fEstiloArial5;
    }
    
    public void preparar(boolean aLiberarPreparacao) {
        if (aLiberarPreparacao) {
            prepararAlturas();
            prepararBandas();
            titulo("");
            dataHoje();
        }
    }

    protected void prepararAlturas() {
    }

    protected void prepararBandas() {
        prepararGrupo(fBandaCabecalhoGrupoH,fBandaRodapeGrupoH);
        prepararBandaTitulo(fBandaTituloH);
        prepararBandaCabecalhoPagina(fBandaCabecalhoPaginaH);
        prepararBandaCabecalhoColuna(fBandaCabecalhoColunaH);
        prepararBandaDetalhe(fBandaDetalheH);
        prepararBandaRodapeColuna(fBandaRodapeColunaH);
        prepararBandaRodapePagina(fBandaRodapePaginaH);
        prepararBandaSumario(fBandaSumarioH);
    }
    /*
    private JRDesignStyle setEstilo(
    String aNomeEstilo, String aNomeFonte, int aTamFonte,
    String aNomeFontePdf, String aCodificacaoPdf) {
    //
    return
    estilo(
    aNomeEstilo,aNomeFonte,aTamFonte,
    aNomeFontePdf,aCodificacaoPdf,false,true);
    }
     */

    public void prepararGrupo(
            final int aAlturaCabecalho, 
            final int aAlturaRodape) {
        //
        fGrupoRelatorio = getGrupoRelatorio();
        if (fGrupoRelatorio != null) {
            try {
                addGroup(fGrupoRelatorio);
                prepararBandaCabecalhoGrupo(aAlturaCabecalho);
                prepararBandaRodapeGrupo(aAlturaRodape);
            } catch (JRException ex) {
                Logger.getLogger(CRelatorioBasico.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    protected CGrupoRelatorio getGrupoRelatorio() {
        return null;
    }
    
    public void prepararBandaCabecalhoGrupo(int aAltura) {
    }

    public void prepararBandaRodapeGrupo(int aAltura) {
    }
 
    public CBandaRelatorio getBandaCabecalhoGrupo() {
       CBandaRelatorio b = null;
       if (fGrupoRelatorio != null) {
           b = fGrupoRelatorio.getBandaCabecalho(0);
       }
       return b;
    }
 
    public CBandaRelatorio getBandaRodapeGrupo() {
       CBandaRelatorio b = null;
       if (fGrupoRelatorio != null) {
           b = fGrupoRelatorio.getBandaRodape(0);
       }
       return b;
    }

    public void prepararEstilos(
            String aNomeFonte,
            String aNomeFontePdf,
            String aCodificacaoPdf) {
        //
        fEstiloTitulo =
                estilo("titulo", aNomeFonte, 14, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        fEstiloCabecalhoPagina =
                estilo("cabecalho_pagina", aNomeFonte, 20, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        fEstiloCabecalhoColuna =
                estilo("cabecalho_coluna", aNomeFonte, 10, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        fEstiloDetalhe =
                estilo("detalhe", aNomeFonte, 8, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        fEstiloRodapeColuna =
                estilo("rodape_coluna", aNomeFonte, 14, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        fEstiloRodapePagina =
                estilo("rodape_pagina", aNomeFonte, 20, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        fEstiloSumario =
                estilo("sumario", aNomeFonte, 24, false, Color.black, Color.white, aNomeFontePdf, aCodificacaoPdf, false, true);
        //
        fEstiloArial18 =
                estilo(
                "arial18", "Arial", 18, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial12 =
                estilo(
                "arial12", "Arial", 12, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial11 =
                estilo(
                "arial11", "Arial", 11, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial10 =
                estilo(
                "arial10", "Arial", 10, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial9 =
                estilo(
                "arial9", "Arial", 9, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial8 =
                estilo(
                "arial8", "Arial", 8, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        //
        fEstiloArial7 =
                estilo(
                "arial7", "Arial", 7, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        //
        fEstiloArial6 =
                estilo(
                "arial6", "Arial", 6, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        //
        fEstiloArial5 =
                estilo(
                "arial5", "Arial", 5, false, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        //
        fEstiloArial18Bold =
                estilo(
                "arial18bold", "Arial", 18, true, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        //
        fEstiloArial12Bold =
                estilo(
                "arial12bold", "Arial", 12, true, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial11Bold =
                estilo(
                "arial11bold", "Arial", 11, true, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial9Bold =
                estilo(
                "arial9bold", "Arial", 9, true, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial8Bold =
                estilo(
                "arial8bold", "Arial", 8, true, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial7Bold =
                estilo(
                "arial7bold", "Arial", 7, true, Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial9CentroMeio =
                estilo(
                "arial9centromeio", "Arial", 9, false,
                HorizontalAlignEnum.CENTER,
                VerticalAlignEnum.MIDDLE,
                Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial8CentroMeio =
                estilo(
                "arial8centromeio", "Arial", 8, false,
                HorizontalAlignEnum.CENTER,
                VerticalAlignEnum.MIDDLE,
                Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial7CentroMeio =
                estilo(
                "arial7centromeio", "Arial", 7, false,
                HorizontalAlignEnum.CENTER,
                VerticalAlignEnum.MIDDLE,
                Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        fEstiloArial10BoldCentroMeio =
                estilo(
                "arial10boldcentromeio", "Arial", 10, true,
                HorizontalAlignEnum.CENTER,
                VerticalAlignEnum.MIDDLE,
                Color.black, Color.white,
                "Arial", "Cp1252", false, true);
        //
        fEstiloArial6DirMeio =
                estilo(
                "arial6DirMeio", "Arial", 6, false,
                HorizontalAlignEnum.RIGHT,
                VerticalAlignEnum.MIDDLE,
                Color.black, Color.white,
                "Arial", "Cp1252", false, true);
    }

    public void prepararBandaTitulo(int aAltura) {
        fBandaTitulo = banda(
                CRelatorioJasperDesign.enumTipoBanda.titulo, aAltura, fEstiloTitulo);
    }

    public void prepararBandaCabecalhoPagina(int aAltura) {
        fBandaCabecalhoPagina = banda(
                CRelatorioJasperDesign.enumTipoBanda.cabecalhoPagina, aAltura, fEstiloCabecalhoPagina);
    }

    public void prepararBandaCabecalhoColuna(int aAltura) {
        fBandaCabecalhoColuna = banda(
                CRelatorioJasperDesign.enumTipoBanda.cabecalhoColuna, aAltura, fEstiloCabecalhoColuna);
    }

    public void prepararBandaDetalhe(int aAltura) {
        fBandaDetalhe = banda(
                CRelatorioJasperDesign.enumTipoBanda.detalhe, aAltura, fEstiloDetalhe);
    }

    public void prepararBandaRodapeColuna(int aAltura) {
        fBandaRodapeColuna = banda(
                CRelatorioJasperDesign.enumTipoBanda.rodapeColuna, aAltura, fEstiloRodapeColuna);
    }

    public void prepararBandaRodapePagina(int aAltura) {
        fBandaRodapePagina = banda(
                CRelatorioJasperDesign.enumTipoBanda.rodapePagina, aAltura, fEstiloRodapePagina);
    }

    public void prepararBandaSumario(int aAltura) {
        fBandaSumario = banda(
                CRelatorioJasperDesign.enumTipoBanda.sumario, aAltura, fEstiloSumario);
    }

    public JRDesignTextField campoTextoDetalhe(
            final String aTituloCampo,
            final String aNomeCampo,
            final String aFormato,
            final Class aClasse,
            final String aPadrao,
            //final byte aAlinhamentoHorizontal,
            final CEstiloRelatorio aEstiloRelatorio,
            final int aX, final int aW,
            final int aY, final int aH) {
        //
        campo(aNomeCampo, aClasse);
        fBandaCabecalhoColuna.textoEstatico(
                aTituloCampo,
                aX, aY, aW, aH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstiloRelatorio);
        return fBandaDetalhe.campoTextoNumericoBd(
                aNomeCampo,
                aFormato,
                aClasse,
                aPadrao,
                aX, aY, aW, aH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstiloRelatorio);
    }

    public JRDesignTextField campoTextoDetalhe(
            final String aTituloCampo,
            final String aNomeCampo,
            final String aFormato,
            final Class aClasse,
            final String aPadrao,
            //final byte aAlinhamentoHorizontal,
            final CEstiloRelatorio aEstiloRelatorio,
            final int aX, final int aW) {
        //
        campo(aNomeCampo, aClasse);
        fBandaCabecalhoColuna.textoEstatico(
                aTituloCampo,
                aX, fComponenteBandaCabecalhoColunaY, aW, fComponenteBandaCabecalhoColunaH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstiloRelatorio);
        return fBandaDetalhe.campoTextoNumericoBd(
                aNomeCampo,
                aFormato,
                aClasse,
                aPadrao,
                aX, fComponenteBandaDetalheY, aW, fComponenteBandaDetalheH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstiloRelatorio);
    }

    public JRDesignTextField campoTextoDetalhe(
            String aTituloCampo, String aNomeCampo, Class aClasse, String aPadrao,
            //byte aAlinhamentoHorizontal,
            final CEstiloRelatorio aEstiloRelatorio,
            int aX, int aW) {
        //
        campo(aNomeCampo, aClasse);
        if(aTituloCampo != null) {
            fBandaCabecalhoColuna.textoEstatico(
                    aTituloCampo,
                    aX, fComponenteBandaCabecalhoColunaY, 
                    aW, fComponenteBandaCabecalhoColunaH,
                    aEstiloRelatorio);
        }
        return fBandaDetalhe.campoTextoBd(
                aNomeCampo,
                aClasse,
                aPadrao,
                aX, fComponenteBandaDetalheY, 
                aW, fComponenteBandaDetalheH,
                aEstiloRelatorio);
    }

    public JRDesignTextField campoTextoDetalhe(
            String aNomeCampo, Class aClasse, String aPadrao,
            final CEstiloRelatorio aEstiloRelatorio,
            int aX, int aW) {
        //
        return campoTextoDetalhe(null,aNomeCampo,aClasse, aPadrao,aEstiloRelatorio,aX, aW);
    }
    
    public JRDesignTextField campoTextoDetalhe(
            String aTituloCampo, String aNomeCampo, Class aClasse, String aPadrao,
            //byte aAlinhamentoHorizontal,
            final CEstiloRelatorio aEstiloRelatorio,
            int aX, int aW,
            int aY, int aH) {
        //
        campo(aNomeCampo, aClasse);
        fBandaCabecalhoColuna.textoEstatico(
                aTituloCampo,
                aX, aY, aW, aH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstiloRelatorio);
        return fBandaDetalhe.campoTextoBd(
                aNomeCampo,
                aClasse,
                aPadrao,
                aX, aY, aW, aH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstiloRelatorio);
    }

    public JRDesignTextField campoTexto(
            String aTituloCampo, String aNomeCampo, Class aClasse, String aPadrao,
            //byte aAlinhamentoHorizontal,
            int aX, int aW,
            CEstiloRelatorio aEstilo,
            CBandaRelatorio fComponenteBandaDetalhe) {
        //
        campo(aNomeCampo, aClasse);
        fBandaCabecalhoColuna.textoEstatico(
                aTituloCampo,
                aX, fComponenteBandaCabecalhoColunaY, aW, fComponenteBandaCabecalhoColunaH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstilo);
        return fComponenteBandaDetalhe.campoTexto(
                "$F{" + aNomeCampo + "}",
                aClasse,
                aPadrao,
                aX, fComponenteBandaDetalheY, aW, fComponenteBandaDetalheH,
                //JRElement.MODE_OPAQUE,
                //aAlinhamentoHorizontal,
                aEstilo);
    }

    public void titulo(String aTitulo) {
        fTituloRelatorio = parametro("TITULO_RELATORIO", "\"" + aTitulo + "\"", String.class);
    }

    public void dataHoje() {
        fDataHoje = parametro("DATA_HOJE", "\"" + new SimpleDateFormat("dd/MM/yyyy").format(Calendar.getInstance().getTime()) + "\"", String.class);
    }

    public JRDesignParameter getTituloRelatorio() {
        return fTituloRelatorio;
    }

    public JRDesignParameter getDataHoje() {
        return fDataHoje;
    }
}
 